using System.Data.SqlClient;

public static class SqlErrorRepro {
   private static string sqlBatchText = @"
   BEGIN TRY
      SELECT name, log(max_length) FROM sys.columns
   END TRY
   BEGIN CATCH
    ; THROW
   END CATCH";


   public static void Main() {
      using (SqlConnection cn = new SqlConnection(
           @"Data Source=.;Integrated Security=SSPI;Database=tempdb"))
      using (SqlCommand cmd = new SqlCommand(sqlBatchText, cn)) {
         try {
            int rowCount = 0;
            cn.Open();
            using (SqlDataReader reader = cmd.ExecuteReader()) {
               while(reader.Read()) { ++rowCount; };
               while(reader.NextResult());
            }
            System.Console.WriteLine("{0} rows read", rowCount);
         }
         catch (System.Exception ex){
            cmd.CommandText = @"IF @@trancount > 0 ROLLBACK TRANSACTION";
            cmd.ExecuteNonQuery();
            System.Console.WriteLine("ERROR: " + ex.Message);
         }
      }
   }
}